﻿using System;
using System.Text;

namespace LAPI.Core.Mail
{
    /// <summary>
    /// Clase para implementar funcionalidades de servicio SMTP
    /// </summary>
    public class ClientSMTP
    {
        /// <summary>
        /// Cliente SMTP
        /// </summary>
        private System.Net.Mail.SmtpClient clientesmtp;

        /// <summary>
        /// Logger de la clase
        /// </summary>
        private LAPI.Core.Logging.ILogger logger;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="credenciales">Credenciales para autenticar al servicio</param>
        /// <param name="puerto">Puerto a usar en el servicio</param>
        /// <param name="host">Host donde responde el servicio</param>
        /// <param name="ssl">Indica si debe usar conexión ssl o no</param>
        public ClientSMTP(System.Net.NetworkCredential credenciales, Int32 puerto, String host, Boolean ssl)
        {
            clientesmtp = new System.Net.Mail.SmtpClient(host: host, port: puerto);
            clientesmtp.Credentials = credenciales;
            clientesmtp.EnableSsl = ssl;

            logger = LAPI.Core.Logging.LoggerFactory.CreateLogger(type: typeof(ClientSMTP));
        }

        /// <summary>
        /// Método para enviar un email básico.
        /// </summary>
        /// <param name="asunto">Texto que formará el asunto del email</param>
        /// <param name="body">Texto que formará el cuerpo del asunto. Permite HTML</param>
        /// <param name="destinatario">Dirección de correo del destinatario del email</param>
        /// <param name="titulo">Nombre que le aparecerá junto a la dirección origen del email</param>
        /// <returns>Resultado de la operación (true si ha sido enviado, false si no ha podido enviarse)</returns>
        public Boolean sendBasicEmail(String asunto, String body, String destinatario, String titulo)
        {           
            System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
            msg.To.Add(destinatario);
            msg.From = new System.Net.Mail.MailAddress("noreply@lapi.es",titulo,Encoding.UTF8);
            msg.Subject = asunto;
            msg.SubjectEncoding = Encoding.UTF8;
            msg.Body = body;
            msg.IsBodyHtml = true;
            msg.BodyEncoding = Encoding.UTF8;
            
            try
            {
                clientesmtp.Send(msg);
                return true;
            }
            catch (System.Net.Mail.SmtpException ex)
            {
                logger.Error("[sendBasicEmail] Error:" + ex.Message);
                return false;
            }
        }
    }
}
